/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * pnfMantenimientoOrdenDespacho.java
 *
 * Created on Oct 16, 2011, 5:06:03 PM
 */

package visual.Despacho;

import bentity.beCombo;
import bentity.beOrdenDespacho;
import bentity.beUsuario;
import blogic.blHelper;
import blogic.blOrdenDespacho;
import java.sql.Date;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import visual.Seguridad.visualHelper;

/**
 *
 * @author renzo
 */
public class pnfMantenimientoOrdenDespacho extends javax.swing.JPanel {
    private ArrayList<beCombo> lista=new ArrayList<beCombo>();
    private beUsuario usuario = null;
    /** Creates new form pnfMantenimientoOrdenDespacho */
    public pnfMantenimientoOrdenDespacho(beUsuario usuario) {
        initComponents();
        this.usuario = usuario;
        try{
            blHelper blh = new blHelper();
            this.lista = blh.llenaCombo("DESPAC");
            this.cbxEstadoOrdenDespacho.setModel(blh.ComboBoxItem(lista));
        }
        catch(Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error durante la carga del panel");
        }
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        btnRegistrar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        pnlBuscar = new javax.swing.JPanel();
        lblCodigoOrdenDespacho = new javax.swing.JLabel();
        lblFechaDesde = new javax.swing.JLabel();
        lblFechaHasta = new javax.swing.JLabel();
        cbxEstadoOrdenDespacho = new javax.swing.JComboBox();
        lblEstadoOrdenDespacho = new javax.swing.JLabel();
        btnBuscar = new javax.swing.JButton();
        txtCodOrdenDespacho = new javax.swing.JTextField();
        dtcFechaHasta = new com.toedter.calendar.JDateChooser();
        dtcFechaDesde = new com.toedter.calendar.JDateChooser();
        ckbEstadoOrdenDespacho = new javax.swing.JCheckBox();
        pnlOrdenesDespacho = new javax.swing.JPanel();
        jScrollPane3 = new javax.swing.JScrollPane();
        tblOrdenesDespacho = new javax.swing.JTable();
        btnConsultarRutaOptima = new javax.swing.JButton();

        setLayout(null);

        lblTitulo.setFont(new java.awt.Font("Dialog", 0, 36));
        lblTitulo.setForeground(new java.awt.Color(0, 0, 0));
        lblTitulo.setText("Mantenimiento de órdenes de despacho");
        add(lblTitulo);
        lblTitulo.setBounds(12, 12, 725, 43);

        btnRegistrar.setBackground(new java.awt.Color(240, 235, 226));
        btnRegistrar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnRegistrar.setForeground(new java.awt.Color(0, 0, 0));
        btnRegistrar.setText("Registrar");
        btnRegistrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnRegistrarActionPerformed(evt);
            }
        });
        add(btnRegistrar);
        btnRegistrar.setBounds(180, 510, 120, 27);

        btnCancelar.setBackground(new java.awt.Color(240, 235, 226));
        btnCancelar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnCancelar.setForeground(new java.awt.Color(0, 0, 0));
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        add(btnCancelar);
        btnCancelar.setBounds(490, 510, 130, 27);

        btnModificar.setBackground(new java.awt.Color(240, 235, 226));
        btnModificar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnModificar.setForeground(new java.awt.Color(0, 0, 0));
        btnModificar.setText("Modificar");
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        add(btnModificar);
        btnModificar.setBounds(330, 510, 140, 27);

        pnlBuscar.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Buscar órdenes", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        pnlBuscar.setLayout(null);

        lblCodigoOrdenDespacho.setFont(new java.awt.Font("Dialog", 0, 12));
        lblCodigoOrdenDespacho.setForeground(new java.awt.Color(0, 0, 0));
        lblCodigoOrdenDespacho.setText("Código orden despacho");
        pnlBuscar.add(lblCodigoOrdenDespacho);
        lblCodigoOrdenDespacho.setBounds(10, 20, 150, 15);

        lblFechaDesde.setFont(new java.awt.Font("Dialog", 0, 12));
        lblFechaDesde.setForeground(new java.awt.Color(0, 0, 0));
        lblFechaDesde.setText("Despacho desde");
        pnlBuscar.add(lblFechaDesde);
        lblFechaDesde.setBounds(350, 20, 110, 15);

        lblFechaHasta.setFont(new java.awt.Font("Dialog", 0, 12));
        lblFechaHasta.setForeground(new java.awt.Color(0, 0, 0));
        lblFechaHasta.setText("Despacho hasta");
        pnlBuscar.add(lblFechaHasta);
        lblFechaHasta.setBounds(350, 60, 110, 15);

        cbxEstadoOrdenDespacho.setFont(new java.awt.Font("DejaVu Sans", 0, 12));
        cbxEstadoOrdenDespacho.setEnabled(false);
        pnlBuscar.add(cbxEstadoOrdenDespacho);
        cbxEstadoOrdenDespacho.setBounds(170, 60, 140, 25);

        lblEstadoOrdenDespacho.setFont(new java.awt.Font("Dialog", 0, 12));
        lblEstadoOrdenDespacho.setForeground(new java.awt.Color(0, 0, 0));
        lblEstadoOrdenDespacho.setText("Estado orden despacho");
        pnlBuscar.add(lblEstadoOrdenDespacho);
        lblEstadoOrdenDespacho.setBounds(10, 60, 151, 15);

        btnBuscar.setBackground(new java.awt.Color(240, 235, 226));
        btnBuscar.setFont(new java.awt.Font("Dialog", 0, 12));
        btnBuscar.setForeground(new java.awt.Color(0, 0, 0));
        btnBuscar.setText("Buscar");
        btnBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBuscarActionPerformed(evt);
            }
        });
        pnlBuscar.add(btnBuscar);
        btnBuscar.setBounds(510, 100, 120, 27);

        txtCodOrdenDespacho.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                txtCodOrdenDespachoKeyTyped(evt);
            }
        });
        pnlBuscar.add(txtCodOrdenDespacho);
        txtCodOrdenDespacho.setBounds(170, 20, 170, 27);
        pnlBuscar.add(dtcFechaHasta);
        dtcFechaHasta.setBounds(460, 60, 170, 27);
        pnlBuscar.add(dtcFechaDesde);
        dtcFechaDesde.setBounds(460, 20, 170, 27);

        ckbEstadoOrdenDespacho.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ckbEstadoOrdenDespachoActionPerformed(evt);
            }
        });
        pnlBuscar.add(ckbEstadoOrdenDespacho);
        ckbEstadoOrdenDespacho.setBounds(320, 60, 20, 22);

        add(pnlBuscar);
        pnlBuscar.setBounds(50, 70, 670, 140);

        pnlOrdenesDespacho.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)), "Órdenes de despacho", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Dialog", 0, 14), new java.awt.Color(0, 0, 0))); // NOI18N
        pnlOrdenesDespacho.setLayout(null);

        tblOrdenesDespacho.setAutoCreateRowSorter(true);
        tblOrdenesDespacho.setForeground(new java.awt.Color(0, 0, 0));
        tblOrdenesDespacho.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Código", "Fecha de despacho", "Operario", "Estado"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.Object.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblOrdenesDespacho.setColumnSelectionAllowed(true);
        tblOrdenesDespacho.setGridColor(javax.swing.UIManager.getDefaults().getColor("TableHeader.background"));
        tblOrdenesDespacho.setMaximumSize(new java.awt.Dimension(800, 72));
        tblOrdenesDespacho.setMinimumSize(new java.awt.Dimension(200, 72));
        tblOrdenesDespacho.setSelectionForeground(new java.awt.Color(0, 0, 0));
        tblOrdenesDespacho.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        jScrollPane3.setViewportView(tblOrdenesDespacho);
        tblOrdenesDespacho.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_INTERVAL_SELECTION);

        pnlOrdenesDespacho.add(jScrollPane3);
        jScrollPane3.setBounds(20, 30, 630, 190);

        btnConsultarRutaOptima.setBackground(new java.awt.Color(240, 235, 226));
        btnConsultarRutaOptima.setFont(new java.awt.Font("Dialog", 0, 12));
        btnConsultarRutaOptima.setForeground(new java.awt.Color(0, 0, 0));
        btnConsultarRutaOptima.setText("Consultar ruta óptima");
        btnConsultarRutaOptima.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConsultarRutaOptimaActionPerformed(evt);
            }
        });
        pnlOrdenesDespacho.add(btnConsultarRutaOptima);
        btnConsultarRutaOptima.setBounds(460, 230, 190, 27);

        add(pnlOrdenesDespacho);
        pnlOrdenesDespacho.setBounds(50, 220, 670, 270);
    }// </editor-fold>//GEN-END:initComponents

    private void btnRegistrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRegistrarActionPerformed
        dlgRegistroOrdenDespacho rod = new dlgRegistroOrdenDespacho(null, true, this.usuario);
        rod.setVisible(true);
}//GEN-LAST:event_btnRegistrarActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        int fila = this.getTblOrdenesDespacho().getSelectedRow();
        if (fila != -1){
            if (this.tblOrdenesDespacho.getValueAt(fila, 3).equals("Por despachar")){
                dlgModificacionOrdenDespacho mod = new dlgModificacionOrdenDespacho(this, true, this.usuario);
                mod.setVisible(true);
            }
            else
                JOptionPane.showMessageDialog(this, "Solo se pueden modificar órdenes por despachar", "Información", JOptionPane.INFORMATION_MESSAGE);
        }
        else
            JOptionPane.showMessageDialog(this, "Debe elegir una orden para modificar.", "Información", JOptionPane.INFORMATION_MESSAGE);
}//GEN-LAST:event_btnModificarActionPerformed

    private void btnConsultarRutaOptimaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConsultarRutaOptimaActionPerformed
        // TODO add your handling code here:
        int fila = this.tblOrdenesDespacho.getSelectedRow();
        if (fila != -1){
            String strEstadoOrden = this.tblOrdenesDespacho.getValueAt(fila, 3).toString();
            if (strEstadoOrden.equals("Por despachar")){
                dlgConsultarRutaOptima cro = new dlgConsultarRutaOptima(this, true, this.usuario);
                cro.setVisible(true);
            }
            else
                visualHelper.mostrarMensajeAdvertencia("Debe elegir una orden por despachar");
        }
        else
            JOptionPane.showMessageDialog(this, "Debe seleccionar una orden de despacho para consultar su ruta óptima.", "Información", JOptionPane.INFORMATION_MESSAGE);
    }//GEN-LAST:event_btnConsultarRutaOptimaActionPerformed

    private void btnBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBuscarActionPerformed
        // TODO add your handling code here:
        int idOrdenDespacho = -1;
        String estadoOrdenDespacho = "";
        Date fechaDesde = null;
        Date fechaHasta = null;
        try{
            if (!this.txtCodOrdenDespacho.getText().isEmpty())
                idOrdenDespacho = Integer.parseInt(this.txtCodOrdenDespacho.getText());
            if (this.ckbEstadoOrdenDespacho.isSelected())
                if (this.cbxEstadoOrdenDespacho.getSelectedIndex() != -1)
                    estadoOrdenDespacho = this.cbxEstadoOrdenDespacho.getSelectedItem().toString();
            if (this.dtcFechaDesde.getDate() != null)
                fechaDesde = visualHelper.obtenerFechaCalendario(this.dtcFechaDesde);
            if (this.dtcFechaHasta.getDate() != null)
                fechaHasta = visualHelper.obtenerFechaCalendario(this.dtcFechaHasta);
            ArrayList<beOrdenDespacho> od = (new blOrdenDespacho()).obtenerOrdenesPorFiltro(idOrdenDespacho,estadoOrdenDespacho,fechaDesde,fechaHasta);
            DefaultTableModel dtm = (DefaultTableModel)this.getTblOrdenesDespacho().getModel();
            limpiarTabla(dtm);
            if (od.size() != 0)
                llenarTabla(od);
            else
                JOptionPane.showMessageDialog(this, "La búsqueda no arrojó resultados", "Información", JOptionPane.INFORMATION_MESSAGE);
        }
        catch(Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error durante la búsqueda");
        }
    }//GEN-LAST:event_btnBuscarActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        // TODO add your handling code here:
        try{
            int rslt = JOptionPane.showConfirmDialog(this, "¿Está seguro que desea eliminar esta orden de despacho?", "Advertencia", JOptionPane.YES_NO_OPTION);
            if (rslt == JOptionPane.YES_OPTION){
                int fila = this.tblOrdenesDespacho.getSelectedRow();
                if (fila != -1){
                    String estadoOrden = this.tblOrdenesDespacho.getValueAt(fila, 3).toString();
                    if (!estadoOrden.equals("Despachado") && !estadoOrden.equalsIgnoreCase("Cancelada")){
                        int idOrdenDespacho = Integer.parseInt(this.tblOrdenesDespacho.getValueAt(fila, 0).toString());
                        (new blOrdenDespacho()).eliminarOrdenDespacho(idOrdenDespacho);
                        visualHelper.mostrarMensajeSatisfaccion("Se canceló la orden de despacho.");
                        DefaultTableModel dtm = (DefaultTableModel)this.tblOrdenesDespacho.getModel();
                        this.limpiarTabla(dtm);
                    }
                    else
                        JOptionPane.showMessageDialog(this, "No puede eliminar una orden ya despachada o cancelada", "Información", JOptionPane.INFORMATION_MESSAGE);
                }
                else
                    JOptionPane.showMessageDialog(this, "Debe elegir una orden de despacho para eliminar.", "Información", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        catch (Exception e){
            e.printStackTrace();
            visualHelper.mostrarMensajeError("Ocurrió un error al eliminar la orden de despacho.");
        }
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void ckbEstadoOrdenDespachoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ckbEstadoOrdenDespachoActionPerformed
        // TODO add your handling code here:
        if (!this.ckbEstadoOrdenDespacho.isSelected())
            this.cbxEstadoOrdenDespacho.setEnabled(false);
        else
            this.cbxEstadoOrdenDespacho.setEnabled(true);
    }//GEN-LAST:event_ckbEstadoOrdenDespachoActionPerformed

    private void txtCodOrdenDespachoKeyTyped(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodOrdenDespachoKeyTyped
        // TODO add your handling code here:
        String strTexto = this.txtCodOrdenDespacho.getText();
        if (strTexto.length()>6)
            visualHelper.ningunCaracterEnTextField(evt);
        else
            visualHelper.soloDigitosEnTextField(evt);
    }//GEN-LAST:event_txtCodOrdenDespachoKeyTyped

    private void llenarTabla(ArrayList<beOrdenDespacho> ordenes) {
        DefaultTableModel dtm = (DefaultTableModel)this.getTblOrdenesDespacho().getModel();
        Object [] datos = new Object [4];
        for(int i=0;i<ordenes.size();i++){
            datos[0] = ordenes.get(i).getIdOrdenDespacho();
            if (ordenes.get(i).getFechaDespacho() != null)
                datos[1] = ordenes.get(i).getFechaDespacho().toString();
            else
                datos[1] = "Sin fecha";
            datos[2] = ordenes.get(i).getOperario();
            datos[3] = ordenes.get(i).getDescEstadoOrden();
            dtm.addRow(datos);
        }
        this.getTblOrdenesDespacho().setRowSelectionAllowed(true);
        this.getTblOrdenesDespacho().setColumnSelectionAllowed(false);
    }

    private void limpiarTabla(DefaultTableModel dtm) {
        int numFilas = dtm.getRowCount();
        for(int i=(numFilas-1);i>=0;i--)
            dtm.removeRow(i);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnBuscar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnConsultarRutaOptima;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnRegistrar;
    private javax.swing.JComboBox cbxEstadoOrdenDespacho;
    private javax.swing.JCheckBox ckbEstadoOrdenDespacho;
    private com.toedter.calendar.JDateChooser dtcFechaDesde;
    private com.toedter.calendar.JDateChooser dtcFechaHasta;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JLabel lblCodigoOrdenDespacho;
    private javax.swing.JLabel lblEstadoOrdenDespacho;
    private javax.swing.JLabel lblFechaDesde;
    private javax.swing.JLabel lblFechaHasta;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JPanel pnlBuscar;
    private javax.swing.JPanel pnlOrdenesDespacho;
    private javax.swing.JTable tblOrdenesDespacho;
    private javax.swing.JTextField txtCodOrdenDespacho;
    // End of variables declaration//GEN-END:variables

    /**
     * @return the tblOrdenesDespacho
     */
    public javax.swing.JTable getTblOrdenesDespacho() {
        return tblOrdenesDespacho;
    }

    /**
     * @param tblOrdenesDespacho the tblOrdenesDespacho to set
     */
    public void setTblOrdenesDespacho(javax.swing.JTable tblOrdenesDespacho) {
        this.tblOrdenesDespacho = tblOrdenesDespacho;
    }

}
